#ifndef	__APP_MOTOR_H
#define	__APP_MOTOR_H

#include "stm32g0xx_hal.h"


#define	MOTOR_PORT_CLK			__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE


/****** MOTOR 1 ******/
#define	MOTOR_EN_1_PORT			GPIOA
#define	MOTOR_SLEEP_1_PORT		GPIOA
#define	MOTOR_DIR_1_PORT		GPIOA
#define	MOTOR_STEP_1_PORT		GPIOA
#define	MOTOR_NFAULT_1_PORT		GPIOB
#define	MOTOR_INDEX_1_PORT		GPIOA

#define	MOTOR_EN_1_PIN			GPIO_PIN_7
#define	MOTOR_SLEEP_1_PIN		GPIO_PIN_1
#define	MOTOR_DIR_1_PIN			GPIO_PIN_4
#define	MOTOR_STEP_1_PIN		GPIO_PIN_8
#define	MOTOR_NFAULT_1_PIN		GPIO_PIN_0
#define	MOTOR_INDEX_1_PIN		GPIO_PIN_6


#define	MOTOR_EN_1_SET()		HAL_GPIO_WritePin(MOTOR_EN_1_PORT, MOTOR_EN_1_PIN, GPIO_PIN_SET)
#define	MOTOR_EN_1_CLR()		HAL_GPIO_WritePin(MOTOR_EN_1_PORT, MOTOR_EN_1_PIN, GPIO_PIN_RESET)

#define	MOTOR_SLEEP_1_SET()		HAL_GPIO_WritePin(MOTOR_SLEEP_1_PORT, MOTOR_SLEEP_1_PIN, GPIO_PIN_SET)
#define	MOTOR_SLEEP_1_CLR()		HAL_GPIO_WritePin(MOTOR_SLEEP_1_PORT, MOTOR_SLEEP_1_PIN, GPIO_PIN_RESET)

#define	MOTOR_DIR_1_SET()		HAL_GPIO_WritePin(MOTOR_DIR_1_PORT, MOTOR_DIR_1_PIN, GPIO_PIN_SET)
#define	MOTOR_DIR_1_CLR()		HAL_GPIO_WritePin(MOTOR_DIR_1_PORT, MOTOR_DIR_1_PIN, GPIO_PIN_RESET)

#define	MOTOR_STEP_1_SET()		HAL_GPIO_WritePin(MOTOR_STEP_1_PORT, MOTOR_STEP_1_PIN, GPIO_PIN_SET)
#define	MOTOR_STEP_1_CLR()		HAL_GPIO_WritePin(MOTOR_STEP_1_PORT, MOTOR_STEP_1_PIN, GPIO_PIN_RESET)
/*********************/


/****** MOTOR 2 ******/
#define	MOTOR_EN_2_PORT			GPIOA
#define	MOTOR_SLEEP_2_PORT		GPIOB
#define	MOTOR_DIR_2_PORT		GPIOA
#define	MOTOR_STEP_2_PORT		GPIOB
#define	MOTOR_NFAULT_2_PORT		GPIOB
#define	MOTOR_INDEX_2_PORT		GPIOB

#define	MOTOR_EN_2_PIN			GPIO_PIN_0
#define	MOTOR_SLEEP_2_PIN		GPIO_PIN_5
#define	MOTOR_DIR_2_PIN			GPIO_PIN_15
#define	MOTOR_STEP_2_PIN		GPIO_PIN_3
#define	MOTOR_NFAULT_2_PIN		GPIO_PIN_8
#define	MOTOR_INDEX_2_PIN		GPIO_PIN_4


#define	MOTOR_EN_2_SET()		HAL_GPIO_WritePin(MOTOR_EN_2_PORT, MOTOR_EN_2_PIN, GPIO_PIN_SET)
#define	MOTOR_EN_2_CLR()		HAL_GPIO_WritePin(MOTOR_EN_2_PORT, MOTOR_EN_2_PIN, GPIO_PIN_RESET)

#define	MOTOR_SLEEP_2_SET()		HAL_GPIO_WritePin(MOTOR_SLEEP_2_PORT, MOTOR_SLEEP_2_PIN, GPIO_PIN_SET)
#define	MOTOR_SLEEP_2_CLR()		HAL_GPIO_WritePin(MOTOR_SLEEP_2_PORT, MOTOR_SLEEP_2_PIN, GPIO_PIN_RESET)

#define	MOTOR_DIR_2_SET()		HAL_GPIO_WritePin(MOTOR_DIR_2_PORT, MOTOR_DIR_2_PIN, GPIO_PIN_SET)
#define	MOTOR_DIR_2_CLR()		HAL_GPIO_WritePin(MOTOR_DIR_2_PORT, MOTOR_DIR_2_PIN, GPIO_PIN_RESET)

#define	MOTOR_STEP_2_SET()		HAL_GPIO_WritePin(MOTOR_STEP_2_PORT, MOTOR_STEP_2_PIN, GPIO_PIN_SET)
#define	MOTOR_STEP_2_CLR()		HAL_GPIO_WritePin(MOTOR_STEP_2_PORT, MOTOR_STEP_2_PIN, GPIO_PIN_RESET)
/*********************/


#define	MOTOR_1_SPEED_FAST		(700)
#define	MOTOR_1_SPEED_SLOW		(2000)

#define	MOTOR_2_SPEED_FAST		(2000)
#define	MOTOR_2_SPEED_SLOW		(27000)


void APP_Motor_1_Init(void);
void APP_Motor_2_Init(void);

void APP_Motor_1_BackUp(uint16_t Speed);
void APP_Motor_1_Forward(uint16_t Speed);
void APP_Motor_1_Stop(void);

void APP_Motor_2_BackUp(void);
void APP_Motor_2_Forward(uint16_t Speed);
void APP_Motor_2_Stop(void);


#endif

